第5章 排序检索数据
排序数据
按多个列排序
指定排序方向
一、排序数据
检索出的数据并不是以纯粹的随机顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。
子句: SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有
select
语句的from
子句。
为了明确地排序用select语句检索出数据,可使用order by
子句。order by
子句取一个或多个列的名字,据此对输出进行排序。
select prod_name form products order by prod_name;
通常,order by子句中使用的列将是为显示所选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。
二、按多个列排序
首先按价格,然后再按名称排序:
select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;
仅在多个行具有prod_price
值时才对产品按prod_name
进行排序。如果prod_price
列中所有的值都是唯一的,则不会按prod_name
排序。
三、指定排序方向
数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用order by子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定desc关键字。
select prod_id, prod_price, prod_name
from products
order by prod_price desc;
但是,如果打算用多个列排序怎么办?以降序排序产品(最贵的在最前面),然后再对产品名排序:
select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name;
desc关键字只应用到直接位于其前面的列名。
注意:在字典排序顺序中,A被视为与a相同,这是MySQL的默认行为。用
order by
子句做不到。许多数据库管理员可以改变这种规则。
使用order by和limit组合,找出列中最高或最低的值。
select prod_price
from products
order by prod_price desc
limit 1;
注意:子句的顺序。
🔚